iT邦幫忙

2023 iThome 鐵人賽

DAY 5
0
Software Development

掌握Java神器,駕馭SpringBoot猛獸系列 第 5

第五日 基礎類型與引用類型

  • 分享至 

  • xImage
  •  

開頭先來做回顧先前講解的重點,在第三天介紹了資料傳遞的方式,第四天則介紹了使用雙引號建立字串值,以及透過String物件建立字串,兩者在背後執行操作的差異,今日第五天來講解Java資料類型,讀完本篇後在回頭觀看前兩天內容,對知識的連結會更緊密

Java主要兩大資料類型

基礎類型(Primitive Types)
屬於在「編譯階段」就設定實際值的資料類型,並且會將實際值存在Stack中,使用此型別的變數會直接保存實際值

基礎類型列表

  • 布林值: boolean
  • 整數: byte、short、int、long
  • 字元: char
  • 浮點數: float、double

來段程式碼驗證,基礎型別可以取得實際值

char c1 = 'a';
char c2 = 'a';
// output: v1 == v2
if (c1 == c2) {
    System.out.println("c1 == c2");
} else {
    System.out.println("c1 != c2");
}

上面程式實作了兩個變數分別賦予字元'a',作為實際值在進行比對的邏輯,並利用 == 將變數值進行相比,在回顧昨日使用String物件比較實際值的方式,結尾有提到重寫了equals方法,就是利用了基礎類型的char,將實際值逐一比對,來驗證兩個String物件是否相等,說白話點就是,活用基礎類型直接取得實際值的特性,實現了相等值的判斷

引用類型(Refrence Types)
講到引用就能跟記憶體進行聯想,與基礎類型最大的差異在於,使用引用類型的變數,資料主體會變成記憶體的位置,將其作為變數值進行保存,此處的「引用」可以理解為,變數會從別的記憶體位置對實際值的資料進行存取,這種操作資料的方式,就是Day3提到的傳值方式進行資料傳遞,現在來複習傳值用法

  // 引用類型的傳值
    Student stuA = new Student();
    Student stuB = stuA;
    stuA.setName("Bob");
    System.out.printf("StuA:%s StuB:%s \n", stuA.getName(), stuB.getName());
    // output: StuA:Bob StuB:Bob

    stuA.setName("Tom");
    System.out.printf("StuA:%s StuB:%s \n", stuA.getName(), stuB.getName());
    // output: StuA:Tom StuB:Tom
   // 基礎類型的傳值
    int a = 10;
    int b = a;

    System.out.printf("a:%d b:%d \n", a, b);
    // output: a:10 b:10
    a = 60;
    System.out.printf("a:%d b:%d \n", a, b);
    // output: a:60 b:10

觀察輸出結果,可以發現第一個引用類型的傳值,會將引用值的記憶體位置「傳遞給」接收的變數,因此當變數取得值時,會從「引用的記憶體位置」取得實際資料,在往下看基礎類型的傳值操作,可以知道當變數a賦值給變數 b 時,此時變數b的值為10,接著將變數a修改值為60,變數b依舊原先的10,不受任何影響,最後可以得知結論,引用類型是保存目標「實際的記憶體位置」,基礎型別則是紀錄實際資料值

引用

  1. JVM型別說明

上一篇
第四天 來看Java怎麼使用記憶體
下一篇
第六日 看裝拆與拆箱
系列文
掌握Java神器,駕馭SpringBoot猛獸30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言